USE [Bases2]
GO
/****** Object:  StoredProcedure [dbo].[DepositoEfectivo]    Script Date: 12/01/2011 13:52:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DepositoEfectivo]
    @cuenta int,
    @monto decimal(18,2),
    @agencia int
AS 
BEGIN
	SET NOCOUNT ON
	BEGIN TRANSACTION
	
	DECLARE @contador int;
	SET @contador=0	;
	
	SELECT @contador=COUNT(1)
	FROM CUENTA
	WHERE id_cuenta=@cuenta
	
	IF @contador<=0
	BEGIN
		SELECT 'El numero de cuenta que ingreso no existe.';
	END
	ELSE
	BEGIN
		SELECT @contador=COUNT(1)
		FROM BANCO
		INNER JOIN CUENTA ON BANCO.id_banco= CUENTA.id_cuenta 
		INNER JOIN TIPO_CUENTA ON CUENTA.id_tipo_cuenta=TIPO_CUENTA.id_tipo_cuenta
		INNER JOIN CLIENTE_CUENTA ON CLIENTE_CUENTA.id_cuenta=CUENTA.id_cuenta
		INNER JOIN CLIENTE ON CLIENTE.id_cliente=CLIENTE_CUENTA.id_cliente
		INNER JOIN TIPO_CLIENTE ON TIPO_CLIENTE.id_tipo_cliente=CLIENTE.id_tipo_cliente
		INNER JOIN ESTADO_CUENTA ON ESTADO_CUENTA.id_cuenta=CUENTA.id_cuenta
		WHERE (ESTADO_CUENTA.id_tipo_estado=0 OR ESTADO_CUENTA.id_tipo_estado=1)
		AND ESTADO_CUENTA.estado=1
		AND CUENTA.id_cuenta=@cuenta 
		
		IF @contador>0
		BEGIN
			SELECT 'La cuenta que ingreso se encuentra bloqueada o cancelada.';
		END
		ELSE
		BEGIN
			/**********BITACORA*************/
			DECLARE @Diferencia1 decimal (18,2), @DepositosCompensados  decimal (18,2), @Debitos  decimal (18,2)
			SELECT @DepositosCompensados=SUM(monto)
			FROM DEPOSITO
			INNER JOIN CUENTA ON CUENTA.id_cuenta=DEPOSITO.id_cuenta
			WHERE CUENTA.id_cuenta=@cuenta
			AND DEPOSITO.compensado=1												
			
			SELECT @Debitos=SUM(monto)
			FROM DEBITO
			INNER JOIN CUENTA ON CUENTA.id_cuenta=DEBITO.id_cuenta
			WHERE CUENTA.id_cuenta=@cuenta
					
			SET @Diferencia1= ISNULL(@DepositosCompensados,0)-ISNULL(@Debitos,0)								
			/**********BITACORA*************/
		
			SELECT TOP(1) @contador=DEPOSITO.id_deposito
			FROM DEPOSITO
			ORDER BY DEPOSITO.id_deposito DESC
			
			IF @Contador IS NULL
			BEGIN
				SET @Contador=-1
			END
			
			SET @contador=@contador+1
							
			INSERT INTO DEPOSITO VALUES(@contador,@monto,@cuenta,@agencia,1,NULL)		
			
			/**********BITACORA*************/
			DECLARE @Diferencia2 decimal (18,2)
			SELECT @DepositosCompensados=SUM(monto)
			FROM DEPOSITO
			INNER JOIN CUENTA ON CUENTA.id_cuenta=DEPOSITO.id_cuenta
			WHERE CUENTA.id_cuenta=@cuenta
			AND DEPOSITO.compensado=1												
			
			SELECT @Debitos=SUM(monto)
			FROM DEBITO
			INNER JOIN CUENTA ON CUENTA.id_cuenta=DEBITO.id_cuenta
			WHERE CUENTA.id_cuenta=@cuenta
					
			SET @Diferencia2= ISNULL(@DepositosCompensados,0)-ISNULL(@Debitos,0)								
			
			SET @contador=0
			SELECT TOP(1) @contador=BITACORA.id_bitacora
			FROM BITACORA
			ORDER BY BITACORA.id_bitacora DESC						
			IF @contador IS NULL
			BEGIN
				SET @contador=-1
			END
				
			SET @contador=@contador+1							
				
			INSERT INTO BITACORA VALUES(@contador,GETDATE(),2,@cuenta,@Diferencia1,@monto,@Diferencia2,'Se realizo un deposito en efectivo.')
			/**********BITACORA*************/
			
			SELECT 'Deposito realizado correctamente.'			
		END
	END	
	
	COMMIT
	SET NOCOUNT OFF
END
